package com.cetcs.kmga.dataManager.dao.mybatis;

import com.cetcs.kmga.dataManager.entity.device.vo.KeyAndValueVo;
import com.cetcs.kmga.dataManager.entity.logManager.LogQueryField;
import com.cetcs.kmga.dataManager.entity.logManager.vo.LogTbFieldVo;
import com.cetcs.kmga.dataManager.entity.logManager.vo.LogTbKvVo;
import com.cetcs.kmga.dataManager.entity.logManager.vo.LogTbVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * 日志检索dao
 *
 * @author xutao
 * @version V1.0 创建时间：2017-09-11 15:42
 *          Copyright 2017 by CETC
 */
@Repository
public interface LogQueryMapper {

    /**
     * 获取日志的表
     *
     * @param code 表编码
     * @return
     */
    LogTbVo findLogTbInfoById(@Param("code") String code);


    /**
     * 获取表的字段列表
     *
     * @param code 表类型ID
     * @return
     */
    List<LogTbFieldVo> findLogTbFieldInfoByTbId(@Param("code") String code);

    /**
     * 查询日志条件的结果类
     *
     * @param code 表类型ID
     * @return
     */
    List<LogQueryField> findQueryFieldsByTbId(@Param("code") String code);

    /**
     * 资源类型获取资源数组
     *
     * @param code 类型Code
     * @return
     */
    List<KeyAndValueVo> findResourcesByResTypeCode(@Param("code") String code);




    List<KeyAndValueVo> findResourceTypesByResTypeCode(@Param("code") String code);

    /**
     * 根据资源类型获取资源的所有账户
     *
     * @param code 代码Code
     * @return
     */
    List<KeyAndValueVo> findDataBaseUserInfoByResTypeCode(@Param("code") String code);

    /**
     * 查询排序字段的集
     *
     * @param code 代码
     * @return
     */
    List<KeyAndValueVo> findTbSortFieldsByCode(@Param("code") String code);


    /**
     * 获取hbase的模糊匹配参数
     *
     * @param startTime 起始时间
     * @param endTime   结束时间
     * @param clientIp  客户端IP
     * @param userName  用户名称
     * @param dbName    数据库名称
     * @param tbName    表名称
     * @param clusterId 集群ID
     * @return
     */
    List<LogTbKvVo> findHbaseTbKvVoList(@Param("startTime") Date startTime, @Param("endTime") Date endTime,
                                        @Param("clientIp") String clientIp, @Param("userName") String userName,
                                        @Param("dbName") String dbName, @Param("tbName") String tbName,
                                        @Param("clusterId") String clusterId);


    /**
     * 获取solr的模糊匹配参数
     *
     * @param startTime 起始时间
     * @param endTime   结束时间
     * @param clientIp  客户端IP
     * @param userName  用户名称
     * @param dbName    数据库名称
     * @param tbName    表名称
     * @param clusterId 集群ID
     * @return
     */
    List<LogTbKvVo> findSolrTbKvVoList(@Param("startTime") Date startTime, @Param("endTime") Date endTime,
                                       @Param("clientIp") String clientIp, @Param("userName") String userName,
                                       @Param("dbName") String dbName, @Param("tbName") String tbName,
                                       @Param("clusterId") String clusterId);


    /**
     * 获取Mysql的模糊匹配参数
     *
     * @param startTime 起始时间
     * @param endTime   结束时间
     * @param clientIp  客户端IP
     * @param userName  用户名称
     * @param dbName    数据库名称
     * @param tbName    表名称
     * @param clusterId 集群ID
     * @return
     */
    List<LogTbKvVo> findMySqlTbKvVoList(@Param("startTime") Date startTime, @Param("endTime") Date endTime,
                                        @Param("clientIp") String clientIp, @Param("userName") String userName,
                                        @Param("dbName") String dbName, @Param("tbName") String tbName,
                                        @Param("clusterId") String clusterId);

    /**
     * 获取Mongo的模糊匹配参数
     *
     * @param startTime 起始时间
     * @param endTime   结束时间
     * @param clientIp  客户端IP
     * @param userName  用户名称
     * @param dbName    数据库名称
     * @param tbName    表名称
     * @param clusterId 集群ID
     * @return
     */
    List<LogTbKvVo> findMongoTbKvVoList(@Param("startTime") Date startTime, @Param("endTime") Date endTime,
                                        @Param("clientIp") String clientIp, @Param("userName") String userName,
                                        @Param("dbName") String dbName, @Param("tbName") String tbName,
                                        @Param("clusterId") String clusterId);


    /**
     * 获取Mongo的模糊匹配参数
     *
     * @param startTime 起始时间
     * @param endTime   结束时间
     * @param clientIp  客户端IP
     * @param userName  用户名称
     * @param dbName    数据库名称
     * @param tbName    表名称
     * @param clusterId 集群ID
     * @return
     */
    List<LogTbKvVo> findFtpTbKvVoList(@Param("startTime") Date startTime, @Param("endTime") Date endTime,
                                      @Param("clientIp") String clientIp, @Param("userName") String userName,
                                      @Param("dbName") String dbName, @Param("tbName") String tbName,
                                      @Param("clusterId") String clusterId);
}
